package com.muse.designpatterns.prototype;

/**
 * 原型模式， 用原形实例指定创建对象的种类，并z通过拷贝这些原形创建新的对象，也就是说这种不通过new关键字来创建对象，而是通过对象复制（在Java
 * 中体现就是clone或反序列化）来体现的模式，就叫原型模式
 * 性能优良:原型模式是在内存二进制流的拷贝，要比直接new一个对象性能好很多，特别是要在一个循环内产生大量的对象时，原型模式可能能更好地体现其优点。
 * 逃避构造函数的约束，直接在内存中拷贝，构造函数数是不会执行的。(Prototype.java)
 * 浅拷贝与深拷贝示例。(Prototype1.java)
 */
public class Prototype implements Cloneable{
    /** 通过clone方式创建的对象不会执行构造方法 */
    public static void main(String[] args) {
        System.out.println("new方式");
        Prototype prototype = new Prototype();
        System.out.println("clone方式");
        Prototype prototypeClone = prototype.clone();
    }

    public Prototype(){
        System.out.println("构造");
    }
    @Override
    public Prototype clone() {
        try {
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
